package cn.myjerry.generic;

/**
 * 泛型
 * 1、继承|实现
 * 保留 ==> 泛型子类
 * 不保留 ==> 按需实现 可以泛型子类 也可以非泛型子类
 * 属性、方法 ==> 随声明位置而定
 * 2、擦出 ==> 使用继承|实现 没有指定类型，类似于Object
 * @author jerry
 *
 * @param <T1>
 * @param <T2>
 */

public abstract class Father<T1, T2> {
	T1 age;
	public void test(T2 name) {}
}

// 保留
class C1<T1, T2> extends Father<T1, T2> {	//全部保留
	@Override
	public void test(T2 name) {
		//this.age ==> T1
	}	
}

class C2<T2> extends Father<Integer, T2> {	//部分保留
	@Override
	public void test(T2 name) {
		//this.age ==> Integer
	}
}

// 不保留
class C3 extends Father<String, Integer> {
	@Override
	public void test(Integer name) {
		//this.age ==> String
	}
}

class C4 extends Father {
	@Override
	public void test(Object name) {
		//this.age ==> Object
	}
}